package com.koi.pojo.system;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.*;
import com.alibaba.excel.enums.BooleanEnum;
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.List;

/**
 * @author ･ᴗ･
 * @description [系统用户模型]
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ExcelIgnoreUnannotated // 默认不管加不加ExcelProperty的注解的所有字段都会参与读写，加了ExcelIgnoreUnannotated注解以后，不加ExcelProperty注解的字段就不会参与
@ContentRowHeight(15) // 设置单元格高度
@HeadRowHeight(17) // 设置标题高度
@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER) // 设置单元格内容居中
@HeadFontStyle(fontName = "仿宋",color = 20, bold = BooleanEnum.FALSE) // 设置标题字体样式
@ContentFontStyle(fontName = "仿宋",color = 30, bold = BooleanEnum.FALSE) // 设置单元格字体样式
@TableName("sys_login_user")
public class SysLoginUser implements java.io.Serializable {
    /**
     * 用户ID
     */
    // 使用@ExcelIgnore注解：默认所有字段都会和excel去匹配，加了这个注解会忽略该字段
    @TableId(value = "user_id", type = IdType.ASSIGN_ID)
    private Long userId;

    /**
     * 部门ID
     */
    @TableField("dept_id")
    private String deptId;

    /**
     * 登录账号，value属性设置列的名称，index属性设置设置列的序号从 0 开始
     */
    @NotBlank(message = "登录账号不能为空")
    @ColumnWidth(20)
    @ExcelProperty(value = "登录账号", index = 0)
    @TableField("login_name")
    private String loginName;

    /**
     * 用户真实姓名
     */
    @NotBlank(message = "用户真实姓名不能为空")
    @ColumnWidth(20)
    @ExcelProperty(value = "用户名字", index = 1)
    @TableField("user_name")
    private String userName;

    /**
     * 用户密码
     */
    @TableField("password")
    private String password;

    /**
     * 用户类型[1-系统用户 2-注册用户 3-微信用户]
     */
    @TableField("user_type")
    private String userType;

    /**
     * 用户邮箱
     */
    @ColumnWidth(30)
    @ExcelProperty(value = "用户邮箱", index = 2)
    @TableField("email")
    private String email;

    /**
     * 手机号码
     */
    // @KoiDesensitize(rule = DesensitizeRuleEnum.MOBILE_PHONE)
    @NotBlank(message = "手机号码不能为空")
    @ColumnWidth(20)
    @ExcelProperty(value = "手机号码", index = 3)
    @TableField("phone")
    private String phone;

    /**
     * 用户性别[1-男 2-女 3-未知]
     */
    // @KoiDict(dictKey = "sys_user_sex", dictValue = "sex")
    @NotBlank(message = "用户性别不能为空")
    @ColumnWidth(20)
    @ExcelProperty(value = "用户性别[1-男 2-女 3-未知]", index = 4)
    @TableField("sex")
    private String sex;

    /**
     * 头像路径
     */
    @ColumnWidth(20)
    @ExcelProperty(value = "头像路径", index = 5)
    @TableField("avatar")
    private String avatar;

    /**
     * 盐加密
     */
    @TableField("salt")
    private String salt;

    /**
     * 帐号状态[0-正常 1-停用]
     */
    @NotBlank(message = "帐号状态不能为空")
    @TableField("user_status")
    private String userStatus;

    /**
     * 登录IP
     */
    @TableField("login_ip")
    private String loginIp;

    /**
     * 登录时间
     */
    @TableField("login_time")
    private Date loginTime;

    /**
     * 密码更新时间
     */
    @TableField("pwd_update_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GTM+8")
    private Date pwdUpdateTime;

    /**
     * 备注
     */
    @TableField("remark")
    private String remark;

    /**
     * 创建者
     */
    @TableField("create_by")
    private String createBy;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GTM+8")
    private Date createTime;

    /**
     * 更新者
     */
    @TableField("update_by")
    private String updateBy;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GTM+8")
    private Date updateTime;

    /**
     * 部门名称
     */
    @TableField(exist = false)
    private String deptName;

    /**
     * 岗位ID
     */
    @TableField(exist = false)
    private List<Long> postIds;

    /**
     * 角色ID
     */
    @TableField(exist = false)
    private List<Long> roleIds;

}
